package com.itheima.tlias.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@Component
public class AliyunOSSOperator {


	//@Autowired
	private AliyunOSSProperties aliyunOSSProperties;

	public AliyunOSSOperator(AliyunOSSProperties aliyunOSSProperties) {
		this.aliyunOSSProperties = aliyunOSSProperties;
	}

	public AliyunOSSProperties getAliyunOSSProperties() {
		return aliyunOSSProperties;
	}

	public void setAliyunOSSProperties(AliyunOSSProperties aliyunOSSProperties) {
		this.aliyunOSSProperties = aliyunOSSProperties;
	}

	public String upload(byte[] content, String originalFilename) throws Exception {
		String endpoint = aliyunOSSProperties.getEndpoint();
		String bucketName = aliyunOSSProperties.getBucketName();
		// 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
		EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

		// 填写Object完整路径，例如202406/1.png。Object完整路径中不能包含Bucket名称。
		//获取当前系统日期的字符串,格式为 yyyy/MM
		String dir = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM"));
		//根据原始文件名originalFilename, 生成一个新的不重复的文件名
		String newFileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
		String objectName = dir + "/" + newFileName;

		// 创建OSSClient实例。
		OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

		//文件上传
		try {
			ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
		} finally {
			if (ossClient != null) {
				ossClient.shutdown();
			}
		}

		return endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + objectName;
	}

}
